package com.iocup.keybastion.authentication;


import com.iocup.keybastion.core.profile.UserProfile;
import com.iocup.keybastion.core.session.Session;

/**
 * @author xyjxust
 * @create 2022/3/4
 **/
public interface TokenService {

    /**
     * 创建并保存token
     * @param userProfile
     * @return
     */
    Session createAndSave(UserProfile userProfile);

    /**
     * 通过刷新token创建并保存token信息
     * @param refreshTokenValue
     * @return
     */
    Session createAndSaveByRefresh(String refreshTokenValue);

    /**
     * 绑定session
     *
     * @param session
     */
    void save(Session session);

    /**
     * 清除token绑定的session
     *
     * @param token
     */
    void removeByToken(String token);

    /**
     * 多端情况下情况所有的token
     *
     * @param loginName
     */
    void removeByLoginName(String loginName);

    /**
     * 通过token查询到绑定的session
     *
     * @param token
     * @return
     */
    Session getByToken(String token);

    /**
     * 通过sessionId获取session数据,主要用于通过sessionId检测是否已经登录
     *
     * @param sessionId
     * @return
     */
    Session getBySessionId(String sessionId);

    /**
     * 通过刷新token获取session
     *
     * @param refreshToken
     * @return
     */
    Session getByRefreshToken(String refreshToken);

    /**
     * sessionId生成
     * @param loginName
     * @param device
     * @param otherKeys
     * @return
     */
    String extractKey(String loginName,String device,String... otherKeys);



    /**
     * sessionId生成
     * @param loginName
     * @param device
     * @return
     */
    String extractKey(String loginName,String device);





}
